package uqbar.comm.protocol;

import java.util.List;

/**
 * Un protocol es un abstractFactory que agrupa la familia de objetos necesarios
 * para comunicarse con el puerto serie. Un protocol puede ser utilizado como
 * parametro en el metodo estatico SerialPortComm.create No es necesario que un
 * protocolo defina todos los inputProcessors. La lista puede estar vacia y
 * agregarse posteriormente al SerialPortComm Tampoco es necesario tener una
 * implementacion de protocol para construir un SerialPort, se puede invocar
 * directamente al constructor.
 * 
 * 
 * @author leo
 * 
 * @param <T>
 */
public interface Protocol<T> {
	/**
	 * El input builder es el encargado de leer el inputStream del puerto.
	 * Detecta cuando se leyo la completitud de un paquete. El builder utiliza
	 * el InputFactory para construir el paquete de entrada y luego llama al
	 * InputProcessor
	 * 
	 * @return
	 */
	InputBuilder newInputBuilder();

	InputFactory<T> newInputFactory();

	List<InputProcessor<T>> newInputProcessors();

}
